package com.project.mapper;

import com.project.bean.ProductBean;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

/***
 * 商品持久层接口
 */
public interface IProductMapper {
    /***
     * 商品添加
     * @param productBean 添加的商品
     */
    public void add(ProductBean productBean);

    /**
     * 按id删除商品
     * @param id 商品id
     */
    public void del(int id);

    /***
     * 按id修改价格
     * @param id 商品编号
     * @param  price  价格
     */
    public void update(@Param("id") int id,@Param("price") int price);

    /***
     * 按id查询商品
     * @param id 商品id
     * @return 商品对象
     */
    public  ProductBean findById(int id);
    /**
     * 统计产品数量
     * @return 产品数量
     */
    public int countProduct();
    /**
     * 分页查询所有记录
     * @param start 起始记录数
     * @param pageSize 每页显示记录数
     * @return 当前页显示的数据
     */
    public List<ProductBean> cutAll(@Param("start") int start, @Param("pageSize") int pageSize);

    /**
     * 按厂家、生产日期时间段，动态条件分页查询商品
     * @param address 厂家
     * @param startDate 起始日期
     * @param endDate 结束日期
     * @param start 起始记录数
     * @param pageSize 每页显示记录数
     * @return 商品集合
     */
    public List<ProductBean> cutByAddress(@Param("address") String address,
                                       @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate,
                                       @Param("start") int start, @Param("pageSize") int pageSize);

    /**
     * 按商品名、价格范围 动态条件分页查询商品
     * @param name 姓名
     * @param startPrice 起始价格
     * @param endPrice 最后价格
     * @param start      起始记录数
     * @param pageSize  每页显示记录数
     * @return 商品集合
     */
    public List<ProductBean> cutByName(@Param("name") String name,@Param("price") int startPrice,@Param("endPrice") int endPrice,
                                       @Param("start") int start ,  @Param("pageSize") int pageSize);

    /**
     * 按条件统计记录数
     * @param address 厂家
     * @param startDate 起始日期
     * @param endDate 结束日期
     * @return 记录数
     */
    public int countByAddress(@Param("address") String address,@Param("startDate") LocalDate startDate,
                           @Param("endDate") LocalDate endDate);

    /**
     * 按条件统计记录数
     * @param name 名字
     * @param startPrice 起始价格
     * @param endPrice 最终价格
     * @return 记录数
     */
    public int countByName(@Param("name") String name,@Param("price") int startPrice,@Param("endPrice") int endPrice);
}
